package co.com.coomeva.adminEvaluacion.logica;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;

import co.com.coomeva.adminEvaluacion.modelo.entidades.EdPEstado;
import co.com.coomeva.adminEvaluacion.modelo.entidades.EdPRolUsuario;
import co.com.coomeva.adminEvaluacion.modelo.persistencia.EdPEstadoDAO;
import co.com.coomeva.adminEvaluacion.modelo.persistencia.EdPRolUsuarioDAO;

/**
 * A data access object (DAO) providing persistence and search support for
 * EdPEstado entities. Transaction control of the save(), update() and delete()
 * operations can directly support Spring container-managed transactions or they
 * can be augmented to handle user-managed Spring transactions. Each of these
 * methods provides additional information for how to configure it for the
 * desired type of transaction control.
 * 
 * @see co.com.coomeva.adminEvaluacion.modelo.entidades.EdPEstado
 * @author MyEclipse Persistence Tools
 */

public class EdPEstadoLogica {
private static EdPEstadoLogica estadoLogica = null;
	
	//Objeto con el que se accede a la BD
	private EdPEstadoDAO estadoDAO = null;
	
	/**
	 * Constructor de la clase
	 */
	public EdPEstadoLogica() {
		estadoDAO = new EdPEstadoDAO();
	}
	
	/**
	 * Metodo que permite obtener una instancia de la clase
	 * @return Instancia de la clase
	 */
	public static EdPEstadoLogica getInstance()	{
		if(estadoLogica == null) {
			estadoLogica = new EdPEstadoLogica();
		}
		return estadoLogica;
	}	
		
	/**
	 * Metodo que permite consultar los estados
	 * @param consEstado Consecutivo del estado
	 * @param estado Nombre del estado
	 * @return Lista del tipo EdPEstado con los estados consultados
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public List<EdPEstado> consultarEstados(Long consEstado, String estado) throws Exception {

		Session session = estadoDAO.getSession();
		List<EdPEstado> valorList = new ArrayList<EdPEstado>();
		
		try {
			Criteria criterios = session.createCriteria(EdPEstado.class);
			if (consEstado != null && consEstado.longValue() > 0)
				criterios.add(Expression.eq("consEstado", consEstado));
			
			if (estado != null)
				criterios.add(Expression.ilike("estado", estado, MatchMode.ANYWHERE));
									
			criterios.addOrder(Order.asc("consEstado"));
			valorList = criterios.list();
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error consultando los registros");
		} finally {
			estadoDAO.getSession().clear();
			estadoDAO.getSession().close();
		}
		return valorList;
	}	
}